﻿CREATE proc [dbo].[SaveOrganisation]
	@OrgKey [int],
	@OrgTS [nvarchar](18),
	--@Änderung [datetime],
	@Prefix [nvarchar](50),
	@OrgName [nvarchar](50),
	@ZusätzeFW [nvarchar](50),
	@RechtsFKey [int] = null,
	@Suchbegriff [nvarchar](50),
	@Abteilung [nvarchar](50),
	@Adresse [nvarchar](70),
	@EPLZ [int],
	@Straße [nvarchar](50),
	@TelNr1 [nvarchar](20),
	@TelNr2 [nvarchar](20),
	@FaxNr [nvarchar](25),
	@EMail [nvarchar](100),
	@Kurzwahlspeicher [nvarchar](10),
	@Notiz [nvarchar](max),
	@Export [bit],
	@UID	nvarchar(50),
	@Web	nvarchar(255) = null,
	@UserID	int,
	@MyPersons [dbo].[udtPersOrg] readonly

as
begin
	
	set nocount on

	declare @rc int,
			@now datetime2(7) = sysdatetime(),
			@logText nvarchar(150),
			@userName nvarchar(10)

	select	@userName = rtrim(coalesce(u.LoginName,''))
	from	[User].[datUser] u
	where	u.UserID = @UserID

	begin tran

	begin try

		merge into dbo.Organisation as t
		using (
			select @OrgKey 'OrgKey',
				@OrgTS 'OrgTS',
				@Prefix 'Prefix',
				@OrgName 'OrgName',
				@ZusätzeFW 'ZusätzeFW',
				@RechtsFKey 'RechtsFKey',
				@Suchbegriff 'Suchbegriff',
				@Abteilung 'Abteilung',
				@Adresse 'Adresse',
				@EPLZ 'EPLZ',
				@Straße 'Straße',
				@TelNr1 'TelNr1',
				@TelNr2 'TelNr2',
				@FaxNr 'FaxNr',
				@EMail 'eMail',
				@Kurzwahlspeicher 'Kurzwahlspeicher',
				@Notiz 'Notiz',
				@Export 'Export',
				@UID 'UID',
				@Web	'Web',
				@now	'ChangeDate',
				@userName 'UserName'

		) as s on
			s.OrgKey = t.OrgKey
		when not matched by target then
			insert (
				OrgTS,
				Prefix,
				[Name],
				ZusätzeFW,
				RechtsFKey,
				Suchbegriff,
				Abteilung,
				Adresse,
				EPLZ,
				Straße,
				TelNr1,
				TelNr2,
				FaxNr,
				e_Mail,
				Kurzwahlspeicher,
				Notiz,
				Export,
				[UID],
				Web,
				CreateOn,
				CreateBy,
				LastChangedOn,
				LastChangedBy
			)
			Values (
				s.OrgTS,
				s.Prefix,
				s.OrgName,
				s.ZusätzeFW,
				s.RechtsFkey,
				s.Suchbegriff,
				s.Abteilung,
				s.Adresse,
				s.EPLZ,
				s.Straße,
				s.TelNr1,
				s.TelNr2,
				s.FaxNr,
				s.eMail,
				s.Kurzwahlspeicher,
				s.Notiz,
				s.Export,
				s.[UID],
				s.Web,
				s.ChangeDate,
				s.UserName,
				s.ChangeDate,
				s.UserName
			)
			when matched then
			update
				set 
					OrgTS = s.OrgTS,
					Prefix = s.Prefix,
					[Name] = s.OrgName,
					ZusätzeFW = s.ZusätzeFW,
					RechtsFkey = s.RechtsFKey,
					Suchbegriff = s.Suchbegriff,
					Abteilung = s.Abteilung,
					Adresse = s.Adresse,
					EPLZ = s.EPLZ,
					Straße = s.Straße,
					TelNr1 = s.TelNr1,
					TelNr2 = s.TelNr2,
					FaxNr = s.FaxNr,
					e_Mail = s.eMail,
					Kurzwahlspeicher = s.Kurzwahlspeicher,
					Notiz = s.Notiz,
					Export = s.Export,
					[UID] = s.[UID],
					[Web] = s.[Web],
					LastChangedOn = s.ChangeDate,
					LastChangedBy = s.UserName
			;

		if @OrgKey = 0
		begin
			select @OrgKey = @@IDENTITY
		end					


		;with persons
		as
		(
			select	p.OrgKey,
					p.PersKey,
					p.BerufstitelKey,
					p.FunktionsKey,
					p.Durchwahl,
					p.Fax,
					p.Tätigkeit
			from	@MyPersons p
		)
		merge into [dbo].[PersOrg] t
		using persons s on
			s.OrgKey = t.OrgKey
				and s.PersKey = t.PersKey
		when not matched by target then
		insert (
			OrgKey, 
			PersKey, 
			FunktionsKey, 
			BerufstitelKey, 
			Durchwahl, 
			Fax, 
			Tätigkeit
		)
		values (
			s.OrgKey, 
			s.PersKey, 
			s.FunktionsKey, 
			s.BerufstitelKey, 
			s.Durchwahl, 
			s.Fax, 
			s.Tätigkeit
		)
		when not matched by source 
			and t.OrgKey = @OrgKey
			then 
				delete
		when matched then
		update
			set
				OrgKey			= s.OrgKey, 
				PersKey			= s.PersKey, 
				FunktionsKey	= s.FunktionsKey, 
				BerufstitelKey	= s.BerufstitelKey, 
				Durchwahl		= s.Durchwahl, 
				Fax				= s.Fax, 
				Tätigkeit		= s.Tätigkeit
		;

		end try
	begin catch
		Select @OrgKey 'OrgKey', -1 'Return', ERROR_MESSAGE() 'Error' 
		goto WithError
	end catch

	select @OrgKey 'OrgKey', 0 'Return', null 'Error'

	commit tran
	
	return 0

WithError:
	if @@TRANCOUNT > 0
	begin
		set @logText = 'SaveOrganisation: ' + cast(@OrgKey as char(10))
		exec @rc = dbo.SaveLog
			@UserID = @UserID,
			@LogType = 'S',
			@LogArea = 'Bv',
			@LogDetails = @logText,
			@IsError = 1
		rollback tran
	end
	return -1	
	
end
GO
GRANT EXECUTE
    ON OBJECT::[dbo].[SaveOrganisation] TO PUBLIC
    AS [dbo];

